package cn.rkylin.oms.base.refundReasonType.utils.apprhandler.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import cn.rkylin.oms.aftersale.sysrefund.vo.SysRefundVO;
import cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler;
import cn.rkylin.oms.common.consts.YesNoConst;
import cn.rkylin.oms.order.service.IOrderService;
import cn.rkylin.oms.order.vo.OrderSkuVO;
import cn.rkylin.oms.order.vo.OrderVO;

/**
 * 类名:HasRefundSkuHandler <br/>
 * 作用: 校验订单包含退款商品. <br/>
 * 创建原因: 校验订单包含退款商品. <br/>
 * 创建时间: 2017年11月3日 下午2:35:56 <br/>
 * 
 * @author zhanghao
 * @version v1.0
 */
public class HasRefundSkuHandler extends ApprHandler {
    private String ruleContent = "订单包含退款商品；";
    
    @Autowired
    public IOrderService orderService;

    /**
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#getRuleContent()
     */
    @Override
    protected String getRuleContent() {
        return ruleContent;
    }

    /**
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#isValid(cn.rkylin.oms.aftersale.sysrefund.vo.SysRefundVO)
     */
    @Override
    protected boolean isValid(SysRefundVO sysRefundVO) throws Exception {
        boolean returnResult = true;
        /*
         * 校验逻辑：如果退款单关联订单未废弃且存在退款商品，审核退款单失败，要给出失败原因<br/>
         * 
         * 如果不存在，该条规则校验通过。<br/>
         */
        String orderId = sysRefundVO.getOrderId();
        OrderVO orderVO = new OrderVO();
        orderVO.setOrderId(orderId);
        orderVO.setDeleted(YesNoConst.NO);
        orderVO.setIsCancel(YesNoConst.NO);
        List<OrderVO> orderList = orderService.findByWhere(0, Integer.MAX_VALUE, orderVO ).getList();
        OrderVO objectOrder = null;
        /*
         *  此处的订单一般为1条，如果等于0表示没有找到关联的订单，就应该是系统错误了
         */
        if(orderList.size()>0) {
            // 如果退款单上有未删除的订单商品，则校验不通过；如果退款单上没有未删除的订单商品，则校验通过
            // 根据退款单ID获取订单商品
            List<OrderSkuVO> orderSkuList = orderService.getOrderSkuByRefundId(sysRefundVO.getRefundId());
            if(orderSkuList.size()>0) {
                returnResult = false;
            }
        }else {
            returnResult = false;
        }
        return returnResult;
    }
    
    /**
     * @see cn.rkylin.oms.base.refundReasonType.utils.apprhandler.ApprHandler#getRuleCheckArray()
     */
    @Override
    protected int[] getRuleCheckArray() {
        int[] ruleCheckArray = { 1 };
        return ruleCheckArray;
    }
}
